package com.hbnu.system.config;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 自定义反序列化器，用于处理List<String>类型字段
 * 当输入为空字符串时，将其转换为空列表
 */
public class ListStringDeserializer extends JsonDeserializer<List<String>> {
    @Override
    public List<String> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec();
        JsonNode node = mapper.readTree(jsonParser);
        
        // 如果是字符串类型且为空，则返回空列表
        if (node.isTextual() && node.asText().isEmpty()) {
            return new ArrayList<>();
        }
        
        // 如果是数组类型，正常解析为列表
        if (node.isArray()) {
            List<String> result = new ArrayList<>();
            for (JsonNode element : node) {
                if (element.isTextual()) {
                    result.add(element.asText());
                }
            }
            return result;
        }
        
        // 其他情况返回空列表
        return new ArrayList<>();
    }
}